#ifndef GTRACK_CONFIDENCE_H
#define GTRACK_CONFIDENCE_H

#include <stdbool.h>
#include <math.h>
#include "gtrack.h"

#define TRACK_WINDOW_SIZE 5  // 原DATACACHE
#define VELOCITY_THRESHOLD_X 1.0f  // 原VEL_THR_X
#define FAST_CONFIRM_THRESHOLD 0.9f

/* 跟踪状态枚举（原样保留）*/
typedef enum {
    STATE_TRACK_INIT = 0,
    STATE_TRACK_TENTATIVE,
    STATE_TRACK_CONFIRMED,
    STATE_TRACK_MISSED
} TrackingState;

/* 滑动窗口计算器（原MovingAverage升级版） */
typedef struct {
    float buffer[TRACK_WINDOW_SIZE];
    int write_pos;    // 更清晰的命名
    int valid_count;  // 有效数据量
    float sum;        // 当前总和
} MotionWindow;

/* 目标运动特征*/
typedef struct {
    GTRACK_measurementUnion current_center;      // 原cur_center
    GTRACK_measurementUnion optimized_result;    // 原cur_optimizedResults
    MotionWindow velocity_x;                     // 原vel_x
    MotionWindow velocity_y;                     // 原vel_y
    MotionWindow position_x;                     // 原p_x 
    MotionWindow position_y;                     // 原p_y
    float centroid_snr;                          // 原centroidSnr
    int hit_points_num;                          // 原hitPointsNums
} TargetKinematics;

/* 质量评估指标（原Track_STATE_PARAM拆分） */
typedef struct {
    float quality_score;         // 质量分
    float last_score;            // 上次的质量分
    float motion_consistency;    // 原motion_consistency
} TrackQuality;

/* 跟踪计数器（原Track_STATE_PARAM拆分） */
typedef struct {
    int total_hits;              // 原hits
    int consecutive_hits;        // 原consecutive_hits
    int consecutive_misses;      // 原consecutive_misses
    uint64_t age;                // 原age
} TrackCounters;

/* 综合跟踪状态 */
typedef struct {
    TrackingState state;          // 原state
    TrackQuality quality;         // 质量评估指标
    TrackCounters counters;       // 计数器组
    TargetKinematics kinematics;  // 运动特征数据

    struct {
        float filtered_vel_x;     // 原ave_vel_x
        float filtered_vel_y;     // 原ave_vel_y
        float current_vel_x;      // 原cur_vel_x
        float current_vel_y;      // 原cur_vel_y
    } velocity;
} TrackedObject;

// 函数原型（与原始功能完全对应）
void track_init(TrackedObject* obj);
void gtrack_unitConfidence(void* handle, uint16_t num);

#endif